#include "apue.h"
#include <stdio.h>
#include <stdlib.h>

int main(void) {
    char buf[4];

    while (fgets(buf, 4, stdin) != NULL) {
        if (fputs(buf, stdout) == EOF)
            err_sys("fputs error");
    }
    // 标准 IO 将 buf 中的数据复制到内核(write)，内核再将数据复制到内核中的缓冲区高速缓存或页高速缓存，然后达到某种条件再排入队列，晚些时候再写入磁盘。
    // fysnc 将内核缓存区数据排入队列，并且等待写磁盘操作结束才返回
    // 获取标准 IO 流对应的文件描述符
    fsync(fileno(stdout));
}
